package br.com.toscano.contpedido.view;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import br.com.toscano.contpedido.business.RecebimentoBC;
import br.com.toscano.contpedido.constant.ConstantesMensagem;
import br.com.toscano.contpedido.domain.ContextoUsuario;
import br.com.toscano.contpedido.domain.Perfil;
import br.com.toscano.contpedido.domain.Recebimento;
import br.com.toscano.contpedido.view.converter.DateConverter;
import br.gov.frameworkdemoiselle.annotation.PreviousView;
import br.gov.frameworkdemoiselle.stereotype.ViewController;
import br.gov.frameworkdemoiselle.transaction.Transactional;

@ViewController
@PreviousView("./recebimento_conferir.jsf")
public class RecebimentoConferirMB extends RecebimentoListMB {

	private static final long serialVersionUID = 1L;
//
	@Inject
	private RecebimentoBC recebimentoBC;
	
	
	private Date dataRecebimentoInicial;
	private Date dataRecebimentoFinal;

	
	public Date getDataRecebimentoInicial() {
		return dataRecebimentoInicial;
	}

	public void setDataRecebimentoInicial(Date dataRecebimentoInicial) {
		this.dataRecebimentoInicial = dataRecebimentoInicial;
	}

	public Date getDataRecebimentoFinal() {
		return dataRecebimentoFinal;
	}

	public void setDataRecebimentoFinal(Date dataRecebimentoFinal) {
		this.dataRecebimentoFinal = dataRecebimentoFinal;
	}

	//	
//	private Date dataRecebimentoInicial = new Date();
//	private Date dataRecebimentoFinal = new Date();
//	
//	private Boolean conferido = false;
//	
//	public Boolean getConferido() {
//		return conferido;
//	}
//
//	public void setConferido(Boolean conferido) {
//		this.conferido = conferido;
//	}
//
//	public RecebimentoBC getRecebimentoBC() {
//		return recebimentoBC;
//	}
//
//	public void setRecebimentoBC(RecebimentoBC recebimentoBC) {
//		this.recebimentoBC = recebimentoBC;
//	}
//
//	public Date getDataRecebimentoInicial() {
//		return dataRecebimentoInicial;
//	}
//
//	public void setDataRecebimentoInicial(Date dataRecebimentoInicial) {
//		this.dataRecebimentoInicial = dataRecebimentoInicial;
//	}
//
//	public Date getDataRecebimentoFinal() {
//		return dataRecebimentoFinal;
//	}
//
//	public void setDataRecebimentoFinal(Date dataRecebimentoFinal) {
//		this.dataRecebimentoFinal = dataRecebimentoFinal;
//	}
//
//
//	@Inject
//	private UsuarioBC usuarioBC;
//	private List<SelectItem> usuarios;
//	private Long usuario;
//
//	public List<SelectItem> getUsuarios() {
//		usuarios = new ArrayList<SelectItem>();
//		boolean admin = false;
//		ContextoUsuario usuario = (ContextoUsuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO);
//		if (usuario != null) {
//			for (Perfil perfil :usuario.getUsuario().getListaPerfil()) {
//				if (perfil.getId().equals(Perfil.PERFIL_ADM)){
//					admin = true;
//				}
//			}
//		}
//		if (admin) {
//			List<Usuario> lista = usuarioBC.findAll();
//			for (Usuario obj: lista) {
//				usuarios.add(new SelectItem(obj.getId() , obj.getNome()));
//			}
//		} else {
//			usuarios.add(new SelectItem(usuario.getUsuario().getId() , usuario.getUsuario().getNome()));
//		}
//		return usuarios;
//	}
//
//	public void setUsuarios(List<SelectItem> usuarios) {
//		this.usuarios = usuarios;
//	}
//
//	public Long getUsuario() {
//		return usuario;
//	}
//
//	public void setUsuario(Long usuario) {
//		this.usuario = usuario;
//	}
//
//
//	@Inject
//	private ClienteBC clienteBC;
//	private List<SelectItem> clientes;
//	private Long cliente;
//
//
//	public List<SelectItem> getClientes() {
//		clientes = new ArrayList<SelectItem>();
//		List<Cliente> lista = clienteBC.findAll();
//		for (Cliente obj: lista) {
//			clientes.add(new SelectItem(obj.getId() , obj.getNome()));
//		}
//		return clientes;
//	}
//
//	public void setClientes(List<SelectItem> clientes) {
//		this.clientes = clientes;
//	}
//
//	public Long getCliente() {
//		return cliente;
//	}
//
//	public void setCliente(Long cliente) {
//		this.cliente = cliente;
//	}
//
//	@Override
	protected List<Recebimento> handleResultList() {

		this.setCliente(null);
		setDataRecebimentoInicial(null);
		setDataRecebimentoFinal(null);
		
		boolean admin = false;
		ContextoUsuario usuario = (ContextoUsuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO);
		if (usuario != null) {
			for (Perfil perfil :usuario.getUsuario().getListaPerfil()) {
				if (perfil.getId().equals(Perfil.PERFIL_ADM)){
					admin = true;
				}
			}
			
		}
		
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();    

		if (!admin) {
			this.setUsuario(usuario.getUsuario().getId());
		} else {
			if (request.getParameter("usuario") != null && !"".equals(request.getParameter("usuario")))
				this.setUsuario(new Long(request.getParameter("usuario")));
		}
		
		if (request.getParameter("cliente") != null && !"".equals(request.getParameter("cliente")))	
			this.setCliente(new Long(request.getParameter("cliente")));
		
		if (request.getParameter("dataRecebimentoInicial_input") != null && !"".equals(request.getParameter("dataRecebimentoInicial_input")))	{
			setDataRecebimentoInicial(DateConverter.getDate(request.getParameter("dataRecebimentoInicial_input")));
		}

		if (request.getParameter("dataRecebimentoFinal_input") != null && !"".equals(request.getParameter("dataRecebimentoFinal_input")))	{
			setDataRecebimentoFinal(DateConverter.getDate(request.getParameter("dataRecebimentoFinal_input")));
		}

		return recebimentoBC.consultarRecebimento(this.getCliente(), this.getUsuario(), this.getDataRecebimentoInicial(), this.getDataRecebimentoFinal(), false);
		
	}

	@Transactional
	public String deleteSelection() {
		boolean delete;
		for (Iterator<Long> iter = getSelection().keySet().iterator(); iter.hasNext();) {
			Long id = iter.next();
			delete = getSelection().get(id);
			if (delete) {
				recebimentoBC.conferido(id);
				iter.remove();
			}
		}
		return getPreviousView();
	}
//	
//	
//	public void postProcessXLS(Object document) {
//		
//
////		org.apache.poi.hssf.usermodel.HSSFWorkbook a;
////		org.apache.poi.ss.usermodel.Workbook b;
//		
//		HSSFWorkbook wb = (HSSFWorkbook) document;
//		HSSFSheet sheet = wb.getSheetAt(0);
//		
//		/******************** HEADER **********************/		
//		CellStyle headerStyle = wb.createCellStyle();
//		Font headerFont = wb.createFont();
//		headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
//		headerFont.setColor(HSSFColor.BLUE.index);
//		headerStyle.setFont(headerFont);
//		headerStyle.setAlignment(CellStyle.ALIGN_CENTER);
//		 
//		Row headerRow = sheet.getRow(0);
//		int cont = 0; 
//		for (Cell cell : headerRow) {
//			cell.setCellStyle(headerStyle);
//			if (0 == cont) {
//				cell.setCellValue("");
//			} else if (cont ==1) {
//				cell.setCellValue("Código Recebimento");
//			} else if (cont ==2) {
//				cell.setCellValue("Data Recebimento");
//			} else if (cont ==3) {
//				cell.setCellValue("Forma de Recebimento");
//			} else if (cont ==4) {
//				cell.setCellValue("Valor do Recebimento");
//			}
//			cont++;
//		}
//		
//		/******************** TOTAL **********************/
//		CellStyle style = wb.createCellStyle();
//		Font font = wb.createFont();
//		font.setBoldweight(Font.BOLDWEIGHT_BOLD);
////		font.setColor(HSSFColor.ORANGE.index); 
//		style.setFont(font);
//		style.setAlignment(CellStyle.ALIGN_RIGHT);
//		Row totalRow = sheet.createRow(sheet.getLastRowNum()+2);
//		Cell cell1 = totalRow.createCell(3);
//		cell1.setCellValue("Total");
//		cell1.setCellStyle(style);
//		Cell cell2 = totalRow.createCell(4);
//		
//		BigDecimal valor = BigDecimal.ZERO;
//		List<Recebimento> pedidos = this.getResultList();
//		for (Recebimento pedido : pedidos) {
//			valor = valor.add(pedido.getValorTotalRecebimento());
//		}
//		
//		cell2.setCellFormula(valor.toString());
//		
//		cell2.setCellStyle(style);
//
//		//Ajuste do tamanho das colunas
//		sheet.autoSizeColumn(0);
//		sheet.autoSizeColumn(1);
//		sheet.autoSizeColumn(2);
//		sheet.autoSizeColumn(3);
//	}
//	
//

}